#pragma once

#include <vex/iterable/concept/trivial_range_concept.h>

namespace vex { namespace iterable { namespace concept {
    template <class TRange, class TValue>
    class OutputRange : public TrivialRange<TRange> {
    public:
        typedef range_traits<TRange> traits;
        typedef typename traits::category category;
        typedef typename traits::range_type range_type;
        typedef typename traits::value_type value_type;
    public:
        BOOST_CONCEPT_ASSERT((boost::Convertible<category, output_range_tag>));
        BOOST_CONCEPT_USAGE(OutputRange)
        {
            m_result_of_put = m_instance.put(std::declval<TValue>());
        }
    private:
        TRange m_instance;
        bool m_result_of_put;
    };
}}}
